import argparse


def args_parser():
    parser = argparse.ArgumentParser()
    parser.add_argument('--aggregation', type=str, default='fedgpma-efficient')
    parser.add_argument('--epochs', type=int, default=200)
    parser.add_argument('--num_users', type=int, default=20)
    parser.add_argument('--frac', type=float, default=1.0)
    parser.add_argument('--local_ep', type=int, default=1)
    parser.add_argument('--local_bs', type=int, default=16)
    parser.add_argument('--lr', type=float, default=0.005)
    # parser.add_argument('--lr', type=float, default=0.0002)
    parser.add_argument('--optimizer', type=str, default='AdamW')
    parser.add_argument('--device', type=str, default='cuda:0')
    parser.add_argument('--momentum', type=float, default=0.9)
    parser.add_argument('--dataset', type=str, default='cifar10')
    parser.add_argument('--iid', type=int, default=1)
    parser.add_argument('--save_dir', type=str, default='run/synthesis')
    parser.add_argument('--partition', type=str, default='dirichlet')
    parser.add_argument('--beta', type=float, default=0.5)
    # parser.add_argument('--batch_size', type=int, default=256)
    parser.add_argument('--seed', type=int, default=1)
    # parser.add_argument('--model', type=str, default='cnn_adapter')
    parser.add_argument('--model', type=str, default='cnn')
    parser.add_argument('--mu', type=float, default=0.01, help='hyper parameter for fedprox')
    parser.add_argument('--decay', type=float, default=0.1, help="learning rate decay per global round") # 每隔10轮衰减一次学习率

    parser.add_argument("--b1", type=float, default=0.5, help="adam: decay of first order momentum of gradient")
    parser.add_argument("--b2", type=float, default=0.999, help="adam: decay of first order momentum of gradient")
    parser.add_argument("--sample_interval", type=int, default=1, help="interval between image sampling")
    parser.add_argument('--global_ep', type=int, default=200)
    parser.add_argument('--alpha', type=float, default=0.00)

    args = parser.parse_args()
    return args